package com.chocus.service;

import com.chocus.util.LoggerHelper;
import com.chocus.entity.Employee;
import com.chocus.mapper.EmployeeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

/**
 * 〈一句话功能简述〉<br>
 * 〈员工服务层〉
 *
 * @author chocus
 * @create 2018/5/14
 * @since 1.0.0
 */
@Service
public class EmployeeService implements LoggerHelper {

    @Autowired
    private EmployeeMapper employeeMapper;

    @Cacheable(cacheNames = "emps")
    public Employee getEmp(Integer id) {
        log.info("查询 {} 号员工", id);
        return employeeMapper.getEmpById(id);
    }

    /**
     * 测试步骤：
     * 1）查询1号员工，查到的结果会放到缓存中
     * 2）以后查询还是之前的结果
     * 3）更新1号员工：【lastName：zhangsan；gender：0】
     * 将方法的返回值也放进缓存了
     * key： 传入的employee对象  值：返回的employee对象
     * 4）查询1号员工
     * 应该是更新后的员工：
     * key = "#employee.id": 使用传入的参数的员工id
     * key = "#result.id": 使用返回后的员工id
     * ！！@Cacheable的key不能用#result
     * 为什么是没更新前的？【1号员工没有在缓存中更新】
     *
     * @param employee
     * @return
     */
    @CachePut(cacheNames = "emps", key = "#result.id")
    public Employee updateEmp(Employee employee) {
        log.info("修改 员工 {}", employee);
        employeeMapper.updateEmp(employee);
        return employee;
    }

    @CacheEvict(cacheNames = "emps")
    public void delEmp(Integer id) {
        log.info("删除 {} 号员工", id);
    }
}